package com.yunbao.hujin.mymvpcommon;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.yunbao.hujin.mymvpcommon.define.FieldView;
import com.yunbao.hujin.mymvpcommon.define.ViewFind;
import com.yunbao.hujin.mymvpcommon.factory.CreatePresenter;
import com.yunbao.hujin.mymvpcommon.mvp.RequestPresenter;
import com.yunbao.hujin.mymvpcommon.mvp.RequestView;
import com.yunbao.hujin.mymvpcommon.request.WeatherBean;

/**
 * https://github.com/ljqloveyou123/perfect-mvp
 * 第六步:对应demo5,终极封装
 * 上面的问题：
 * 1.在AbstractMvpActivity中，绑定View，解绑View这些方法，如果现在再创建一个AbstractMvpFragment或者
 * AbstractMvpView、或者是一个AbstractMvpXXX等，那么这些代码全部都要再写一遍，代码冗余，可以抽出去
 * <p>
 * 2.实现AbstractMvpActivity的实现类中创建Presenter的方法，每个实现类都要写new，这一步父类完全可以帮忙解决
 * <p>
 * 3.如果Activity或者Fragment或者View等V层意外销毁，那么我们的Presenter也没有必要存在了，界面都没有了还
 * 要这个有什么用，但是如果又被重启
 * 那么我们还需要再恢复Presenter，也就是说让我们的Presenter和View的生命周期同步，这样才算完美
 * <p>
 * 4.创建Presenter的动作放到使用时再创建，可以稍微优化一下性能问题
 * <p>
 * 解决问题：
 * 1.使用【代理模式】将绑定和解绑view的操作抽离出来
 * 定义绑定解绑
 * <p>
 * 2.使用【工厂模式】和注解在上层统一创建Presenter
 * <p>
 * 3.序列化保存Presenter，销毁Presenter对象，如果View重建反序列化重新获取Presenter
 * <
 * 4.将Presenter的创建过程放入到获取Presenter的方法中，如果存在返回，不存在创建，保证Presenter不会为空
 * ，而且这样还可以保证在使用的时候再创建，节省内存资源
 *
 * 其中demo3比较好用
 */
@CreatePresenter(RequestPresenter.class)
public class MainActivity extends BaseActivity<RequestView, RequestPresenter> implements RequestView{

    @FieldView(R.id.tv_text)
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewFind.bind(this);
        //设置自己的Presenter工厂，如果你想自定义的话
//         setPresenterFactory(xxx);
        if (savedInstanceState != null) {
            Log.e("perfect-mvp","MainActivity  onCreate 测试  = " + savedInstanceState.getString("test") );
        }
    }

    //点击事件
    public void request(View view) {
        Log.e("perfect-mvp","点击事件");
        getPresenter().clickRequest("101210101");//--101010100
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.e("perfect-mvp","MainActivity onSaveInstanceState 测试");
        outState.putString("test","test_save");
    }

    /********----View层RequestView3接口----************/
    @Override
    public void requestLoading() {
        textView.setText("请求中,请稍后...");
    }

    @Override
    public void resultSuccess(WeatherBean bean) {
        //成功
        textView.setText(bean.getWeatherinfo().toString());
    }

    @Override
    public void resultFailure(String result) {
        //失败
        textView.setText(result);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        getPresenter().interruptHttp();
    }
}
